#include "mymapmodelkeystoheader.h"

MyMapModelKeysToHeaders::MyMapModelKeysToHeaders(MyAbstractMapContainer * MapContainer, bool isVertical, QObject *parent) :
	QAbstractListModel(parent), mc(MapContainer), isV(isVertical){
}

Qt::ItemFlags MyMapModelKeysToHeaders::flags(const QModelIndex &index) const{
//	if (!index.isValid())
//		return Qt::ItemIsEnabled;
	return QAbstractItemModel::flags(index) | Qt::ItemIsEditable;
}

QVariant MyMapModelKeysToHeaders::data(const QModelIndex &index, int role) const{
	if (index.isValid() && (role == Qt::DisplayRole || role == Qt::EditRole))
		if(isV) // Если встолбик
			return mc->getValue(index.row());
		else// Если встрочку
			return mc->getValue(index.column());
	else
		return QVariant();
}

QVariant MyMapModelKeysToHeaders::headerData(int section, Qt::Orientation orientation, int role) const{
	if (role != Qt::DisplayRole)
		return QVariant();

	if ((orientation == Qt::Vertical && isV) ||
			(orientation == Qt::Horizontal && !isV))
		return mc->getKey(section);
	else
		return QVariant();
}

int MyMapModelKeysToHeaders::rowCount(const QModelIndex &parent) const{
	if(isV) // Если встолбик
		return mc->size();
	else// Если встрочку
		return 1;
}

int MyMapModelKeysToHeaders::columnCount ( const QModelIndex & parent) const{
	if(isV) // Если встолбик
		return 1;
	else// Если встрочку
		return mc->size();
}

bool MyMapModelKeysToHeaders::setData(const QModelIndex &index, const QVariant &value, int role){
	if (index.isValid() && role == Qt::EditRole) {
		if(isV) // Если встолбик
			mc->setValue(index.row(), value);
		else// Если встрочку
			mc->setValue(index.column(), value);
		emit dataChanged(index, index);
		return true;
	}
	return false;
}

bool MyMapModelKeysToHeaders::setHeaderData ( int section, Qt::Orientation orientation, const QVariant & value, int role){
	return false;
}

bool MyMapModelKeysToHeaders::insertRows(int position, int rows, const QModelIndex &index){
	return false;
}

bool MyMapModelKeysToHeaders::removeRows(int position, int rows, const QModelIndex &index){
	if(isV){ // Если встолбик
		bool rez = true;
		int n = position + rows;
		if(n > mc->size()) n = mc->size();
		beginRemoveRows(QModelIndex(), position, position+rows-1);
		for(int i = position; i < n; ++i){
			rez = rez && mc->deleteItem(i);
		}
		return rez;
	}else// Если встрочку
		return false;
}

bool MyMapModelKeysToHeaders::insertColumns ( int column, int count, const QModelIndex & parent){
	return false;
}

bool MyMapModelKeysToHeaders::removeColumns ( int column, int count, const QModelIndex & parent){
	if(isV) // Если встолбик
		return false;
	else{// Если встрочку
		bool rez = true;
		int n = column + count;
		if(n > mc->size()) n = mc->size();
		beginRemoveRows(QModelIndex(), column, column + count - 1);
		for(int i = column; i < n; ++i){
			rez = rez && mc->deleteItem(i);
		}
		return rez;
	}
}

QModelIndex MyMapModelKeysToHeaders::parent ( const QModelIndex & index ) const{
	return QModelIndex();
}
